borderimage: Add _gtk_border_image_new_for_context()
authorBenjamin Otte <otte@redhat.com>
Wed, 4 Jan 2012 03:00:58 +0000 (04:00 +0100)
committerBenjamin Otte <otte@redhat.com>
Mon, 9 Jan 2012 17:37:57 +0000 (18:37 +0100)
and use it.

gtk/gtkborderimage.c
gtk/gtkborderimageprivate.h
gtk/gtkthemingengine.c

index 4f1d0c1e5716014609c57d9543f2be84b84421b8..f13b0a83db1ac2c7ef4a61b3c7fd72c17e51cf7e 100644 (file)
@@ -28,6 +28,7 @@
 
 #include "gtkborderimageprivate.h"
 #include "gtkstylepropertiesprivate.h"
+#include "gtkthemingengineprivate.h"
 
 /* this is in case round() is not provided by the compiler, 
  * such as in the case of C89 compilers, like MSVC
@@ -72,6 +73,21 @@ _gtk_border_image_new (GtkCssImage             *source,
   return image;
 }
 
+GtkBorderImage *
+_gtk_border_image_new_for_engine (GtkThemingEngine *engine)
+{
+  GtkCssImage *source;
+
+  source = g_value_get_object (_gtk_theming_engine_peek_property (engine, "border-image-source"));
+  if (source == NULL)
+    return NULL;
+
+  return _gtk_border_image_new (source,
+                                g_value_get_boxed (_gtk_theming_engine_peek_property (engine, "border-image-slice")),
+                                g_value_get_boxed (_gtk_theming_engine_peek_property (engine, "border-image-width")),
+                                g_value_get_boxed (_gtk_theming_engine_peek_property (engine, "border-image-repeat")));
+}
+
 GtkBorderImage *
 _gtk_border_image_ref (GtkBorderImage *image)
 {
index 39b3eb07144d8d0822b0dc12b3f4560946b3c808..f9654daba2034b4d202c1dd1d71cb885ad733a36 100644 (file)
@@ -43,6 +43,7 @@ GtkBorderImage *  _gtk_border_image_new              (GtkCssImage          *sour
                                                       GtkBorder            *slice,
                                                       GtkBorder            *width,
                                                       GtkCssBorderImageRepeat *repeat);
+GtkBorderImage *  _gtk_border_image_new_for_engine   (GtkThemingEngine     *engine);
 
 GtkBorderImage *  _gtk_border_image_ref              (GtkBorderImage       *image);
 void              _gtk_border_image_unref            (GtkBorderImage       *image);
index 57e16e50bcd963aef0f44ab88caf2ac80844b483..edcd5c426db2182d5c6fdc1cce6e3c8801ed2930 100644 (file)
@@ -1552,8 +1552,8 @@ gtk_theming_engine_render_frame (GtkThemingEngine *engine,
   junction = gtk_theming_engine_get_junction_sides (engine);
   gtk_theming_engine_get_border (engine, flags, &border);
 
+  border_image = _gtk_border_image_new_for_engine (engine);
   gtk_theming_engine_get (engine, flags,
-                         "border-image", &border_image,
                          "border-style", &border_style,
                          NULL);
 
@@ -1920,8 +1920,8 @@ gtk_theming_engine_render_frame_gap (GtkThemingEngine *engine,
   junction = gtk_theming_engine_get_junction_sides (engine);
 
   gtk_theming_engine_get_border (engine, state, &border);
+  border_image = _gtk_border_image_new_for_engine (engine);
   gtk_theming_engine_get (engine, state,
-                         "border-image", &border_image,
                          "border-top-left-radius", &top_left_radius,
                          "border-top-right-radius", &top_right_radius,
                          "border-bottom-right-radius", &bottom_right_radius,